package com.rzico.basics.amap.pojo.request;

/**
 * Created by lam on 2018/8/10.
 */
public class POIRequest {

    private String key;

    private String id;

    /**
     * 查询关键字
     * <p>
     * 规则： 多个关键字用“|”分割
     * 若不指定city，并且搜索的为泛词（例如“美食”）的情况下，返回的内容为城市列表以及此城市内有多少结果符合要求。
     * <p>
     * 必填 (keywords和types两者至少必选其一)
     */
    private String keywords;

    /**
     * 中心点坐标
     * <p>
     * 规则： 经度和纬度用","分割，经度在前，纬度在后，经纬度小数点后不得超过6位。
     * <p>
     * 必填
     */
    private String location;

    /**
     * 经纬度坐标对
     * <p>
     * 规则： 经度和纬度用","分割，经度在前，纬度在后，坐标对用"|"分割。经纬度小数点后不得超过6位。
     * <p>
     * 多边形为矩形时，可传入左上右下两顶点坐标对；其他情况下首尾坐标对需相同。
     * <p>
     * 必填
     */
    private String polygon;

    /**
     * 查询POI类型
     * <p>
     * 规则： 多个类型用“|”分割；
     * 可选值：分类代码 或 汉字（若用汉字，请严格按照附件之中的汉字填写）
     * 分类代码由六位数字组成，一共分为三个部分，前两个数字代表大类；中间两个数字代表中类；最后两个数字代表小类。
     * 若指定了某个大类，则所属的中类、小类都会被显示。
     * <p>
     * 若不指定city，返回的内容为城市列表以及此城市内有多少结果符合要求。
     * 当您的keywords和types都是空时，默认指定types为120000（商务住宅）&150000（交通设施服务）
     * <p>
     * 必填 (keywords和types两者至少必选其一)
     */
    private String types;

    /**
     * 查询半径
     * <p>
     * 规则： 取值范围:0-50000。规则：大于50000按默认值，单位：米
     * <p>
     * 默认为  3000
     */
    private String radius = "500";

    /**
     * 查询城市
     * <p>
     * 规则： 可选值：城市中文、中文全拼、citycode、adcode
     * 如：北京/beijing/010/110000
     * 填入此参数后，会尽量优先返回此城市数据，但是不一定仅局限此城市结果，若仅需要某个城市数据请调用citylimit参数。
     * 如：在深圳市搜天安门，返回北京天安门结果。
     * <p>
     */
    private String city;

    /**
     * 是否按照层级展示子POI数据
     * <p>
     * 规则： 可选值：children=1
     * <p>
     * 当为0的时候，子POI都会显示。
     * <p>
     * 当为1的时候，子POI会归类到父POI之中。
     * <p>
     * <p>
     * 仅在extensions=all的时候生效
     * <p>
     * 默认为 0
     */
    private Integer children;

    /**
     * 每页记录数据
     * <p>
     * 强烈建议不超过25，若超过25可能造成访问报错
     * <p>
     * 默认为 20
     */
    private Integer offset;

    /**
     * 当前页数
     * <p>
     * 规则： 最大翻页数100
     * <p>
     * 默认为 1
     */
    private Integer page;


    /**
     * 返回结果控制
     * <p>
     * 规则： 此项默认返回基本地址信息；取值为all返回地址信息、附近POI、道路以及道路交叉口信息。
     * <p>
     * 默认为 base
     */
    private String extensions = "all";

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getKeywords() {
        return keywords;
    }

    public void setKeywords(String keywords) {
        this.keywords = keywords;
    }

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }

    public String getPolygon() {
        return polygon;
    }

    public void setPolygon(String polygon) {
        this.polygon = polygon;
    }

    public String getTypes() {
        return types;
    }

    public void setTypes(String types) {
        this.types = types;
    }

    public String getRadius() {
        return radius;
    }

    public void setRadius(String radius) {
        this.radius = radius;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public Integer getChildren() {
        return children;
    }

    public void setChildren(Integer children) {
        this.children = children;
    }

    public Integer getOffset() {
        return offset;
    }

    public void setOffset(Integer offset) {
        this.offset = offset;
    }

    public Integer getPage() {
        return page;
    }

    public void setPage(Integer page) {
        this.page = page;
    }

    public String getExtensions() {
        return extensions;
    }

    public void setExtensions(String extensions) {
        this.extensions = extensions;
    }

    public String keywordsToString() {
        String params = "key=" + this.key + "&keywords=" + this.keywords;
        if (this.types != null) {
            params += "&types=" + this.types;
        }
        if (this.city != null) {
            params += "&city=" + this.city;
        }
        if (this.children != null) {
            params += "&children=" + this.children;
        }
        if (this.offset != null) {
            params += "&offset=" + this.offset;
        }
        if (this.page != null) {
            params += "&page=" + this.page;
        }
        if (this.extensions != null) {
            params += "&extensions=" + this.extensions;
        }
        return params;
    }

    public String aroundToString() {
        String params = "key=" + this.key + "&location=" + this.location;
        if (this.keywords != null) {
            params += "&keywords=" + this.keywords;
        }
        if (this.types != null) {
            params += "&types=" + this.types;
        }
        if (this.radius != null) {
            params += "&radius=" + this.radius;
        }
        if (this.offset != null) {
            params += "&offset=" + this.offset;
        }
        if (this.page != null) {
            params += "&page=" + this.page;
        }
        if (this.extensions != null) {
            params += "&extensions=" + this.extensions;
        }
        return params;
    }

    public String polygonToString() {
        String params = "key=" + this.key + "&polygon=" + this.polygon;
        if (this.keywords != null) {
            params += "&keywords=" + this.keywords;
        }
        if (this.types != null) {
            params += "&types=" + this.types;
        }
        if (this.offset != null) {
            params += "&offset=" + this.offset;
        }
        if (this.page != null) {
            params += "&page=" + this.page;
        }
        if (this.extensions != null) {
            params += "&extensions=" + this.extensions;
        }
        return params;
    }

    public String detailToString() {
        String params = "key=" + this.key + "&id=" + this.id;

        if (this.extensions != null) {
            params += "&extensions=" + this.extensions;
        }
        return params;
    }
}
